home *** CD-ROM | disk | FTP | other *** search
- /* DSM.H
- *
- * Digital Sound Mixer
- *
- * $Id: dsm.h,v 1.7 1997/01/16 18:41:59 pekangas Exp $
- *
- * Copyright 1996,1997 Housemarque Inc.
- *
- * This file is part of the MIDAS Sound System, and may only be
- * used, modified and distributed under the terms of the MIDAS
- * Sound System license, LICENSE.TXT. By continuing to use,
- * modify or distribute this file you indicate that you have
- * read the license and understand and accept it fully.
- */
-
- #ifndef __DSM_H
- #define __DSM_H
-
-
- #define VOLLEVELS 33
- #define VOLSHIFT 1
-
- /* Magic sample handle for streams: */
- #define DSM_SMP_STREAM MAXSAMPLES
-
-
- #include "sdevice.h"
-
-
- /****************************************************************************\
- * enum dsmMixMode
- * ---------------
- * Description: Available DSM mixing modes
- \****************************************************************************/
-
- enum dsmMixMode
- {
- dsmMixMono = 1, /* mono mixing */
- dsmMixStereo = 2 /* stereo mixing */
- };
-
-
-
-
- /****************************************************************************\
- * enum dsmChanStatus
- * ------------------
- * Description: DSM channel sound playing status
- \****************************************************************************/
-
- enum dsmChanStatus
- {
- dsmChanStopped = 0, /* playing is stopped */
- dsmChanEnd, /* playing has ended (not forced
- stopped */
- dsmChanPlaying, /* playing, not released */
- dsmChanReleased /* playing, note has been released */
- };
-
-
-
-
- /****************************************************************************\
- * enum dsmPlayDir
- * ---------------
- * Description: Playing direction in bidirectional loops
- \****************************************************************************/
-
- enum dsmPlayDir
- {
- dsmPlayBackwards = -1, /* playing backwards */
- dsmPlayForward = 1 /* playing forward */
- };
-
-
-
-
- /****************************************************************************\
- * struct dsmChannel
- * -----------------
- * Description: DSM channel data
- \****************************************************************************/
-
- typedef struct
- {
- uchar *sample; /* sample data pointer */
- int sampleType; /* sample type, see enum
- sdSampleType */
- int samplePos; /* sample position in memory */
- unsigned sampleLength; /* sample length */
- int loopMode; /* sample looping mode, see enum
- sdLoopMode */
- unsigned loop1Start; /* first loop start */
- unsigned loop1End; /* first loop end */
- int loop1Type; /* first loop type, see enum
- sdLoopType */
- unsigned loop2Start; /* second loop start */
- unsigned loop2End; /* second loop end */
- int loop2Type; /* second loop type, see enum
- sdLoopType */
-
- unsigned playPos; /* playing position whole part */
- unsigned playPosLow; /* playing position fractional part
- (only lower 16 bits used) */
- unsigned streamWritePos; /* stream write position */
- ulong rate; /* playing rate in Hz */
- int direction; /* playing direction in bidirectional
- loops - 1 is forward, -1 back */
- unsigned sampleHandle; /* sample handle */
- unsigned sampleChanged; /* 1 if sample has been changed
- but values not yet set in
- channel struct */
- int panning; /* panning information */
- unsigned volume; /* playing volume (0-64) */
- int muted; /* 1 if channel muted, 0 if not */
- int status; /* channel status, see enum dsm
- dsmChanStatus */
- int loopNum; /* currently played sample loop */
- void (CALLING *LoopCallback)(unsigned channel); /* sample loop
- callback */
- } dsmChannel;
-
-
-
-
- /****************************************************************************\
- * struct dsmSample
- * ----------------
- * Description: DSM internal sample structure
- \****************************************************************************/
-
- typedef struct
- {
- uchar *sample; /* sample data pointer */
- int sampleType; /* sample type, see enum
- sdSampleType */
- int samplePos; /* sample position in memory */
- unsigned sampleLength; /* sample length */
- int loopMode; /* sample looping mode, see enum
- sdLoopMode */
- unsigned loop1Start; /* first loop start */
- unsigned loop1End; /* first loop end */
- int loop1Type; /* first loop type, see enum
- sdLoopType */
- unsigned loop2Start; /* second loop start */
- unsigned loop2End; /* second loop end */
- int loop2Type; /* second loop type, see enum
- sdLoopType */
- int inUse; /* 1 if sample is in use, 0 if not
- (removed using dsmRemoveSample) */
- int copied; /* 1 if a copied sample (should be
- deallocated), 0 if not */
- } dsmSample;
-
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
-
- extern unsigned * GLOBALVAR dsmMixBuffer; /* DSM mixing buffer. dsmPlay()
- writes the mixed data here. Post-
- processing is usually necessary. */
- extern unsigned GLOBALVAR dsmMixBufferSize; /* DSM mixing buffer size */
-
- /* The following global variables are used internally by different DSM
- functions and should not be accessed by other modules: */
-
- extern unsigned GLOBALVAR dsmMixRate; /* mixing rate in Hz */
- extern unsigned GLOBALVAR dsmMode; /* output mode (see enum
- dsmMixMode) */
- #ifdef __16__
- extern unsigned GLOBALVAR dsmVolTableSeg; /* volume table segment */
- #endif
- extern unsigned GLOBALVAR *dsmVolumeTable; /* pointer to volume table */
-
- extern dsmChannel * GLOBALVAR dsmChannels; /* pointer to channel datas */
- extern dsmSample * GLOBALVAR dsmSamples; /* sample structures */
- extern unsigned GLOBALVAR dsmOutputBits; /* output bit width */
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmInit(unsigned mixRate, unsigned mode,
- * unsigned outputBits);
- *
- * Description: Initializes Digital Sound Mixer
- *
- * Input: unsigned mixRate mixing rate in Hz
- * unsigned mode mixing mode (see enum dsmMixMode)
- * unsigned outputBits output bit width (if less than
- * 16, output values are divided
- * accordingly - mixing buffer is
- * always a sequence of unsigned ints)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmInit(unsigned mixRate, unsigned mode, unsigned amplitude);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmClose(void)
- *
- * Description: Uninitializes Digital Sound Mixer
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmClose(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetMixRate(unsigned *mixRate)
- *
- * Description: Reads the actual mixing rate
- *
- * Input: unsigned *mixRate pointer to mixing rate variable
- *
- * Returns: MIDAS error code.
- * Mixing rate, in Hz, is stored in *mixRate
- *
- \****************************************************************************/
-
- int CALLING dsmGetMixRate(unsigned *mixRate);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmOpenChannels(unsigned channels);
- *
- * Description: Opens channels for output
- *
- * Input: unsigned channels number of channels to open
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmOpenChannels(unsigned channels);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmCalcVolTable(unsigned amplification)
- *
- * Description: Calculates a new volume table
- *
- * Input: unsigned amplification Amplification level. 64 - normal
- * (100%), 32 = 50%, 128 = 200% etc.
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmCalcVolTable(unsigned amplification);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmCloseChannels(void)
- *
- * Description: Closes open output channels
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmCloseChannels(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmClearChannels(void)
- *
- * Description: Clears open channels (removes all sounds)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmClearChannels(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmMute(int mute)
- *
- * Description: Mutes all channels
- *
- * Input: int mute 1 = mute, 0 = un-mute
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmMute(int mute);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmPause(int pause)
- *
- * Description: Pauses or resumes playing
- *
- * Input: int pause 1 = pause, 0 = resume
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmPause(int pause);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetMasterVolume(unsigned masterVolume)
- *
- * Description: Sets the master volume
- *
- * Input: unsigned masterVolume master volume (0 - 64)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetMasterVolume(unsigned masterVolume);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetMasterVolume(unsigned *masterVolume)
- *
- * Description: Reads the master volume
- *
- * Input: unsigned *masterVolume pointer to master volume
- *
- * Returns: MIDAS error code. Master volume is written to *masterVolume.
- *
- \****************************************************************************/
-
- int CALLING dsmGetMasterVolume(unsigned *masterVolume);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetAmplification(unsigned amplification)
- *
- * Description: Sets amplification level and calculates new volume table.
- *
- * Input: unsigned amplification amplification level, 64 = normal
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetAmplification(unsigned amplification);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetAmplification(unsigned *amplification)
- *
- * Description: Reads the amplification level
- *
- * Input: unsigned *amplification pointer to amplification level
- *
- * Returns: MIDAS error code. Amplification level is written to
- * *amplification.
- *
- \****************************************************************************/
-
- int CALLING dsmGetAmplification(unsigned *amplification);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmPlaySound(unsigned channel, ulong rate)
- *
- * Description: Starts playing a sound
- *
- * Input: unsigned channel channel number
- * ulong rate playing rate in Hz
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmPlaySound(unsigned channel, ulong rate);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmReleaseSound(unsigned channel)
- *
- * Description: Releases the current sound from the channel. If sdLoop1Rel or
- * sdLoop2 looping modes are used, playing will be continued from
- * the release part of the current sample (data after the end
- * of the first loop) after the end of the first loop is reached
- * next time, otherwise the sound will be stopped.
- *
- * Input: unsigned channel channel number
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmReleaseSound(unsigned channel);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmStopSound(unsigned channel)
- *
- * Description: Stops playing a sound
- *
- * Input: unsigned channel channel number
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmStopSound(unsigned channel);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetRate(unsigned channel, ulong rate)
- *
- * Description: Sets the playing rate
- *
- * Input: unsigned channel channel number
- * ulong rate playing rate in Hz
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetRate(unsigned channel, ulong rate);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetRate(unsigned channel, ulong *rate)
- *
- * Description: Reads the playing rate on a channel
- *
- * Input: unsigned channel channel number
- * ulong *rate pointer to playing rate
- *
- * Returns: MIDAS error code. Playing rate is written to *rate, 0 if
- * no sound is being played.
- *
- \****************************************************************************/
-
- int CALLING dsmGetRate(unsigned channel, ulong *rate);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetVolume(unsigned channel, unsigned volume)
- *
- * Description: Sets the playing volume
- *
- * Input: unsigned channel channel number
- * unsigned volume playing volume (0-64)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetVolume(unsigned channel, unsigned volume);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetVolume(unsigned channel, unsigned *volume)
- *
- * Description: Reads the playing volume
- *
- * Input: unsigned channel channel number
- * unsigned *volume pointer to volume
- *
- * Returns: MIDAS error code. Playing volume is written to *volume.
- *
- \****************************************************************************/
-
- int CALLING dsmGetVolume(unsigned channe, unsigned *volume);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetSample(unsigned channel, unsigned smpHandle)
- *
- * Description: Sets the sample number on a channel
- *
- * Input: unsigned channel channel number
- * unsigned smpHandle sample handle returned by
- * dsmAddSample()
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetSample(unsigned channel, unsigned smpHandle);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetSample(unsigned channel, unsigned *smpHandle)
- *
- * Description: Reads current sample handle
- *
- * Input: unsigned channel channel number
- * unsigned *smpHandle pointer to sample handle
- *
- * Returns: MIDAS error code. Sample handle is written to *smpHandle;
- *
- \****************************************************************************/
-
- int CALLING dsmGetSample(unsigned channel, unsigned *smpHandle);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmChangeSample(unsigned channel)
- *
- * Description: Changes the sample used in a channel to the one specified
- * by the channel's sample handle. Used only internally by
- * other DSM functions, does no error checking.
- *
- * Input: unsigned channel channel number
- *
- * Returns: MIDAS error code (does not fail)
- *
- \****************************************************************************/
-
- int CALLING dsmChangeSample(unsigned channel);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetPosition(unsigned channel, unsigned position)
- *
- * Description: Sets the playing position from the beginning of the sample
- *
- * Input: unsigned channel channel number
- * unsigned position new playing position
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetPosition(unsigned channel, unsigned position);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetPosition(unsigned channel, unsigned *position)
- *
- * Description: Reads the current playing position
- *
- * Input: unsigned channel channel number
- * unsigned *position pointer to playing position
- *
- * Returns: MIDAS error code. Playing position is written to *position.
- *
- \****************************************************************************/
-
- int CALLING dsmGetPosition(unsigned channel, unsigned *position);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetDirection(unsigned channel, int *direction)
- *
- * Description: Reads current playing direction
- *
- * Input: unsigned channel channel number
- * int *direction pointer to playing direction. 1 is
- * forward, -1 backwards
- *
- * Returns: MIDAS error code. Playing direction is written to *direction.
- *
- \****************************************************************************/
-
- int CALLING dsmGetDirection(unsigned channel, int *direction);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetPanning(unsigned channel, int panning)
- *
- * Description: Sets the panning position of a channel
- *
- * Input: unsigned channel channel number
- * int panning panning position (see enum sdPanning)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetPanning(unsigned channel, int panning);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmGetPanning(unsigned channel, int *panning)
- *
- * Description: Reads the panning position of a channel
- *
- * Input: unsigned channel channel number
- * int *panning pointer to panning position
- *
- * Returns: MIDAS error code. Panning position is written to *panning.
- *
- \****************************************************************************/
-
- int CALLING dsmGetPanning(unsigned channel, int *panning);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmMuteChannel(unsigned channel, int mute)
- *
- * Description: Mutes/un-mutes a channel
- *
- * Input: unsigned channel channel number
- * int mute muting status - 1 = mute, 0 = un-mute
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmMuteChannel(unsigned channel, int mute);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmAddSample(sdSample *sample, int copySample,
- * unsigned *smpHandle);
- *
- * Description: Adds a new sample to the DSM sample list and prepares it for
- * DSM use
- *
- * Input: sdSample *sample pointer to sample information
- * structure
- * int copySample copy sample data to a new place in
- * memory? 1 = yes, 0 = no
- * unsigned *smpHandle pointer to sample handle
- *
- * Returns: MIDAS error code. Sample handle for the new sample is written
- * to *smpHandle
- *
- * Notes: If copySample = 1, sample data must not be in EMS memory
- *
- \****************************************************************************/
-
- int CALLING dsmAddSample(sdSample *sample, int copySample, unsigned *smpHandle);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmRemoveSample(unsigned smpHandle)
- *
- * Description: Removes a sample from the sample list and deallocates it if
- * necessary.
- *
- * Input: unsigned smpHandle sample handle returned by
- * dsmAddSample()
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmRemoveSample(unsigned smpHandle);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmMixData(unsigned numElems)
- *
- * Description: Mixes data to dsmMixBuffer.
- *
- * Input: unsigned numElems number of buffer elements to be mixed.
- * In mono modes an "element" is an
- * unsigned integer, and in stereo
- * two.
- *
- * Returns: MIDAS error code. Mixed data is written to *dsmMixBuffer.
- *
- \****************************************************************************/
-
- int CALLING dsmMixData(unsigned numElems);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmMix(unsigned channel, void *mixRoutine,
- * unsigned volume, unsigned numElems);
- *
- * Description: Mixes data for one channel. Used internally by dsmMixData().
- *
- * Input: unsigned channel channel number
- * void *mixRoutine pointer to low-level mixing routine
- * unsigned volume actual playing volume (volume in
- * channel structure is ignored)
- * unsigned numElems number of elements to mix (see
- * dsmMixData())
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmMix(unsigned channel, void *mixRoutine, unsigned volume,
- unsigned numElems);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmClearBuffer(unsigned numElems)
- *
- * Description: Clears the mixing buffer. Used only by dsmMixData().
- *
- * Input: unsigned numElems number of elements to clear
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING dsmClearBuffer(unsigned numElems);
-
-
-
-
- #ifdef SUPPORTSTREAMS
-
-
- /****************************************************************************\
- *
- * Function: int dsmStartStream(unsigned channel, uchar *buffer,
- * unsigned bufferLength, int sampleType);
- *
- * Description: Starts playing a digital audio stream on a channel
- *
- * Input: unsigned channel channel number
- * uchar *buffer pointer to stream buffer
- * unsigned bufferLength buffer length in bytes
- * int sampleType stream sample type
- * ulong rate stream playing rate (in Hz)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmStartStream(unsigned channel, uchar *buffer, unsigned
- bufferLength, int sampleType, ulong rate);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmStopStream(unsigned channel);
- *
- * Description: Stops playing digital audio stream on a channel
- *
- * Input: unsigned channel channel number
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmStopStream(unsigned channel);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetLoopCallback(unsigned channel,
- * void (CALLING *callback)(unsigned channel));
- *
- * Description: Sets sample looping callback to a channel
- *
- * Input: unsigned channel channel number
- * [..] *callback pointer to callback function, NULL to
- * disable callback
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetLoopCallback(unsigned channel,
- void (CALLING *callback)(unsigned channel));
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dsmSetStreamWritePosition(unsigned channel,
- * unsigned position)
- *
- * Description: Sets the stream write position on a channel
- *
- * Input: unsigned channel channel number
- * unsigned position new stream write position
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dsmSetStreamWritePosition(unsigned channel, unsigned position);
-
-
-
- #endif /* #ifdef SUPPORTSTREAMS */
-
-
- /* Prototypes for the actual mixing routines: */
- void CALLING dsmMix8bitMonoMono(void); /* 8-bit Mono => Mono */
- void CALLING dsmMix8bitMonoStereo(void); /* 8-bit Mono => Stereo */
- void CALLING dsmMix8bitStereoMono(void); /* 8-bit Stereo => Mono */
- void CALLING dsmMix8bitStereoStereo(void); /* 8-bit Stereo => Stereo */
- void CALLING dsmMix16bitMonoMono(void); /* 16-bit Mono => Mono */
- void CALLING dsmMix16bitMonoStereo(void); /* 16-bit Mono => Stereo */
- void CALLING dsmMix16bitStereoMono(void); /* 16-bit Stereo => Mono */
- void CALLING dsmMix16bitStereoStereo(void); /* 16-bit Stereo => Stereo */
-
-
-
-
-
-
-
- #ifdef __cplusplus
- }
- #endif
-
-
-
- /****************************************************************************\
- * enum dsmFunctIDs
- * ----------------
- * Description: ID numbers for DSM functions
- \****************************************************************************/
-
- enum dsmFunctIDs
- {
- ID_dsmInit = ID_dsm,
- ID_dsmClose,
- ID_dsmGetMixRate,
- ID_dsmOpenChannels,
- ID_dsmCalcVolTable,
- ID_dsmCloseChannels,
- ID_dsmClearChannels,
- ID_dsmMute,
- ID_dsmPause,
- ID_dsmSetMasterVolume,
- ID_dsmGetMasterVolume,
- ID_dsmSetAmplification,
- ID_dsmGetAmplification,
- ID_dsmPlaySound,
- ID_dsmReleaseSound,
- ID_dsmStopSound,
- ID_dsmSetRate,
- ID_dsmGetRate,
- ID_dsmSetVolume,
- ID_dsmGetVolume,
- ID_dsmSetSample,
- ID_dsmGetSample,
- ID_dsmChangeSample,
- ID_dsmSetPosition,
- ID_dsmGetPosition,
- ID_dsmGetDirection,
- ID_dsmSetPanning,
- ID_dsmGetPanning,
- ID_dsmMuteChannel,
- ID_dsmAddSample,
- ID_dsmRemoveSample,
- ID_dsmMixData,
- ID_dsmMix,
- ID_dsmMixMoNormal,
- ID_dsmMixStNormal,
- ID_dsmClearBuffer,
- ID_dsmStartStream,
- ID_dsmStopStream,
- ID_dsmSetLoopCallback,
- ID_dsmSetStreamWritePosition
- };
-
-
-
- #endif
-
-
- /*
- * $Log: dsm.h,v $
- * Revision 1.7 1997/01/16 18:41:59 pekangas
- * Changed copyright messages to Housemarque
- *
- * Revision 1.6 1997/01/16 18:19:10 pekangas
- * Added support for setting the stream write position.
- * Stream data is no longer played past the write position
- *
- * Revision 1.5 1996/07/13 18:13:25 pekangas
- * Fixed to compile with Visual C
- *
- * Revision 1.4 1996/06/26 19:15:03 pekangas
- * Added sample loop callbacks
- *
- * Revision 1.3 1996/05/28 20:29:56 pekangas
- * Changed mixing routine prototypes and added new ones
- *
- * Revision 1.2 1996/05/26 20:55:20 pekangas
- * Added dsmStartStream and dsmStopStream
- *
- * Revision 1.1 1996/05/22 20:49:33 pekangas
- * Initial revision
- *
- */